const app = getApp()

const request = (module, url, options) => {
  // 根据模块选择对应的baseUrl
  const baseUrl = app.globalData.baseUrls[module] || app.globalData.baseUrls.user;

  return new Promise((resolve, reject) => {
    // 安全检查：确保url是字符串
    if (typeof url !== 'string') {
      console.error('URL参数必须是字符串，实际收到:', url);
      reject(new Error('URL参数类型错误'));
      return;
    }

    const fullUrl = module === 'chat' ? baseUrl : `${baseUrl}${url}`;

    // WebSocket 连接单独处理
    if (module === 'chat') {
      resolve({ url: fullUrl });
      return;
    }

    console.log('发起请求:', fullUrl, options); // 调试日志

    // 获取token并检查
    const token = wx.getStorageSync('token');
    console.log('当前token:', token); // 调试token
    
    // 如果token不存在且不是登录相关的请求，直接跳转登录
    // if (!token && !url.includes('login') && !url.includes('/send-sms-code') && !url.includes('/register')) {
    //   console.warn('token不存在，跳转登录页面');
    //   wx.showToast({
    //     title: '请先登录',
    //     icon: 'none',
    //     duration: 2000
    //   });
      
    //   setTimeout(() => {
    //     wx.switchTab({
    //       url: '/pages/userInfo/myInfo',
    //     });
    //   }, 1500);
      
    //   reject(new Error('token不存在'));
    //   return;
    // }

    wx.request({
      url: fullUrl,
      method: options.method,
      data: options.method === 'GET' ? options.data : JSON.stringify(options.data),
      header: {
        'Content-Type': 'application/json; charset=UTF-8',
        'token': token || ''
      },
      success(response) {
        console.log('请求响应:', response); // 调试响应
        
        const res = response.data;
        
        // 统一错误处理 - 只根据业务code判断，不根据HTTP状态码
        if (res.code === 401) {
          console.log('token过期，清除本地数据');
          // Token过期或未登录
          wx.showToast({
            title: '登录已过期',
            icon: 'none',
            duration: 2000
          });
          
          // 清除本地数据
          wx.removeStorageSync('token');
          wx.removeStorageSync('userInfo');
          wx.setStorageSync('isLogin', false);
          
          // 跳转到登录页面
          setTimeout(() => {
            wx.switchTab({
              url: '/pages/userInfo/myInfo',
            });
          }, 1500);
          
          reject(res);
          return;
        }
        
        // 处理业务错误
        if (res.code !== 200 && res.code !== '200') {
          // 如果不是401错误，显示具体错误信息
          if (res.code !== 401) {
            wx.showToast({
              title: res.message || '请求失败',
              icon: 'none',
              duration: 2000
            });
          }
          reject(res);
          return;
        }
        
        resolve(res);
      },
      fail(error) {
        console.error('请求失败:', error);
        // 网络错误不一定是登录问题，显示网络错误
        wx.showToast({
          title: '网络连接失败',
          icon: 'none',
          duration: 2000
        });
        reject(error);
      }
    });
  });
};

// 修改各个方法，增加module参数
const get = (module, url, options = {}) => {
  return request(module, url, { method: 'GET', data: options })
}

const post = (module, url, options) => {
  return request(module, url, { method: 'POST', data: options })
}

const put = (module, url, options) => {
  return request(module, url, { method: 'PUT', data: options })
}

// 不能声明DELETE（关键字）
const remove = (module, url, options) => {
  return request(module, url, { method: 'DELETE', data: options })
}

module.exports = {
  get,
  post,
  put,
  remove
}